﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BLLTZS.Funcionalidad
{
    public class BLLPerfil: BLLGenerico
    {
        public BLLPerfil(TZSDataContext contexto) : base(contexto) { }
        public BLLPerfil() : this(new TZSDataContext()) { }

        public TZS_Perfil TraerUltimaVersion(string nombreUsuario)
        {
            return (from p in Contexto.TZS_Perfils
                    where p.TZS_Usuario.NombreUsuario.ToLower().Equals(nombreUsuario.ToLower())
                    orderby p.Version descending
                    select p).FirstOrDefault();
        }

        public void GuardarNuevaVersion(TZS_Perfil nuevaVersion, string nombreUsuario)
        {
            TZS_Perfil versionVieja = TraerUltimaVersion(nombreUsuario);
            TZS_Domicilio domicilio = versionVieja.TZS_Domicilios.OrderByDescending(d => d.IdDomicilio).FirstOrDefault();
            TZS_Contacto contacto = versionVieja.TZS_Contactos.OrderByDescending(c => c.IdContacto).FirstOrDefault();

            BLLUsuario bllUsuario = new BLLUsuario(Contexto);
            nuevaVersion.TZS_Usuario = bllUsuario.TraerUsuario(nombreUsuario);
            nuevaVersion.Version = versionVieja.Version + 1;

            if (nuevaVersion.ArchivoCV == null || nuevaVersion.ArchivoCV == string.Empty)
                nuevaVersion.ArchivoCV = versionVieja.ArchivoCV;
            if (nuevaVersion.ArchivoDNI == null || nuevaVersion.ArchivoDNI == string.Empty)
                nuevaVersion.ArchivoDNI = versionVieja.ArchivoDNI;

            if (domicilio != null)
                domicilio.TZS_Perfil = nuevaVersion;
            if (contacto != null)
                contacto.TZS_Perfil = nuevaVersion;

            Contexto.TZS_Perfils.InsertOnSubmit(nuevaVersion);
        }

        public TZS_Perfil CrearNuevo(TZS_Usuario usuario)
        {
            TZS_Perfil nuevoPerfil = new TZS_Perfil();
            nuevoPerfil.TZS_Usuario = usuario;
            nuevoPerfil.Version = 1;
            Contexto.TZS_Perfils.InsertOnSubmit(nuevoPerfil);
            return nuevoPerfil;
        }

        public bool PoseeDatosObligatorios(string nombreUsuario)
        {
            TZS_Perfil perfil = TraerUltimaVersion(nombreUsuario);

            return perfil.Apellidos != null && perfil.Apellidos != string.Empty
                && perfil.Nombres != null && perfil.Nombres != string.Empty
                && perfil.DNI != null && perfil.DNI != string.Empty;
        }

        public List<TZS_Perfil> TraerHistorial(int idUsuario)
        {
            return (from p in Contexto.TZS_Perfils
                    where p.IdUsuario == idUsuario
                    orderby p.Version descending
                    select p).ToList();
        }

    }
}
